package lv.servidordisqueria.domain;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import lv.mensajeriadisqueria.idomain.IGrupo;
import lv.mensajeriadisqueria.idomain.IMusico;

/**
 * Es la clase con cual se mapea con la tabla GRUPO de la
 * base de datos
 */
@Entity
@Table(name = "GRUPO")
public class Grupo extends Domain implements IGrupo {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1650393055654091505L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_GRUPO")
	private Integer idGrupo;
	
	@Column(name = "NOMBRE")
	private String nombre;

	@ManyToMany(targetEntity = Musico.class, 
			cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@JoinTable(name="RELACION_MUSICO_GRUPO", joinColumns=@JoinColumn(name="ID_GRUPO"),
			inverseJoinColumns=@JoinColumn(name="ID_MUSICO"))
	private List<IMusico> musicos;

	public Grupo(){}
	
	public Grupo(String nombre) {
		super();
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	@Override
	public List<IMusico> getMusicos() {
		return musicos;
	}

	@Override
	public void setMusicos(List<IMusico> musicos) {
		this.musicos = musicos;
	}

	@Override
	public Integer getIdGrupo() {
		return idGrupo;
	}

	@Override
	public void setIdGrupo(Integer idGrupo) {
		this.idGrupo = idGrupo;
	}
}
